package com.example.proyectofc;

import java.io.InputStream;
import java.util.ArrayList;

import org.cocos2d.layers.CCScene;
import org.cocos2d.nodes.CCDirector;
import org.cocos2d.opengl.CCGLSurfaceView;

import almacenamiento.Coordenada;
import almacenamiento.capaJuego;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;

public class juego extends Activity implements SensorEventListener{

	protected CCGLSurfaceView vista;
    private CCScene escenaJuego;
    private SensorManager sens;
	private static boolean grabar = false, conseg;
	
	private static InputStream p1;

	private float valorX, valorY, valorZ;
	
	private float alpha = (float) 0.8;
	
	private float gravedad[] = {0, 0, 0};
	
	private static int conseguido = 1;
	
	private static ArrayList<Coordenada> recorrido = new ArrayList<Coordenada>();
	
//	private double resultado = 0;
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
//	    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
//	    		WindowManager.LayoutParams.FLAG_FULLSCREEN);
//	    getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 
//	    		WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
		
		sens = (SensorManager) getSystemService(SENSOR_SERVICE); 
		sens.registerListener(this, 
				sens.getDefaultSensor(Sensor.TYPE_LINEAR_ACCELERATION), 
        		SensorManager.SENSOR_DELAY_FASTEST);
		
//	    vista = new CCGLSurfaceView(this);
		vista = new CCGLSurfaceView(this);
	    setContentView(vista);
	    CCDirector.sharedDirector().attachInView(vista);	 
//	    CCDirector.sharedDirector().setDisplayFPS(true);
	    CCDirector.sharedDirector().setAnimationInterval(1.0f / 200.0f);
	    escenaJuego = capaJuego.escena(); 
	    
	    p1 = getResources().openRawResource(R.raw.subir);
	}
	
	@Override
	public void onStart() {
	    super.onStart();
	    CCDirector.sharedDirector().runWithScene(escenaJuego);
	}
	
	@Override
	public void onPause() {
	    super.onPause();
	    CCDirector.sharedDirector().onPause();
//	    CCDirector.sharedDirector().pause();
	}
	 
	@Override
	public void onResume()	{
	    super.onResume();
	    CCDirector.sharedDirector().onResume();
//	    CCDirector.sharedDirector().resume();
	}
	 
	@Override
	public void onStop(){
	    super.onStop();
	    CCDirector.sharedDirector().end();
	    SensorManager sm = (SensorManager) getSystemService(SENSOR_SERVICE);        
	    sm.unregisterListener(this);
	}
	
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
    	super.onCreateOptionsMenu(menu);
        menu.add(Menu.NONE, R.id.menuMochila, 0, R.string.mochila);
        menu.add(Menu.NONE, R.id.menuUsuario, 1, R.string.infUsuario);
        menu.add(Menu.NONE, R.id.menuQuitar, 2, R.string.eliminar);
        menu.add(Menu.NONE, R.id.menuAcerca, 3, R.string.acercaDe);
        return true;
    }

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		
		int itemId = item.getItemId();

        switch (itemId) {
                case R.id.menuMochila:
                	Intent myIntent = new Intent(juego.this, 
                			mochila.class);
                    startActivity(myIntent);
                	break;
                case R.id.menuUsuario:
                	Intent myIntent2 = new Intent(juego.this, 
                			informacion.class);
                    startActivity(myIntent2);
                    break;
                case R.id.menuQuitar:
                	Intent myIntent4 = new Intent(juego.this, 
                			eliminar.class);
                    startActivityForResult(myIntent4, 0);
                	break;
                case R.id.menuAcerca:
                	Intent myIntent3 = new Intent(juego.this, 
                			acerca.class);
                    startActivity(myIntent3);
                    break;
                }

		return super.onOptionsItemSelected(item);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, 
			Intent data) {
		super.onActivityResult(requestCode, resultCode, data);
		
		if(requestCode == 0) {
			if(data != null) {
				if(data.getStringExtra("Tipo").equals("1")) {
					Intent intent = new Intent(juego.this, 
							MainActivity.class);
					startActivity(intent);
					finish();
				}
				else if(data.getStringExtra("Tipo").equals("2")) {
					Intent intent = new Intent(juego.this, 
							juego.class);
					startActivity(intent);
					finish();
				}
			}
		}
		else if (requestCode == 1) {
			if(data != null) {
				if(data.getExtras().getString("Resultado").equals("Si")) {
					conseg = true;
				}
				else if (data.getExtras().getString("Resultado").equals("No")) {
					conseg = false;
				}
			}
		}
	} 
	
	public static boolean pruebaPar() {
		
		Intent intent = new Intent(CCDirector.sharedDirector()
				.getActivity(), camara.class);
		CCDirector.sharedDirector().onPause();
		CCDirector.sharedDirector().getActivity()
		.startActivityForResult(intent, conseguido);
		
		return conseg;
	}

	@Override
	public boolean onKeyDown(int keyCode, KeyEvent event) {
		super.onKeyDown(keyCode, event);
		if(keyCode == KeyEvent.KEYCODE_BACK){
			AlertDialog.Builder dialogo = new AlertDialog.Builder(this);
			
			dialogo.setTitle("Confirmacion");
			dialogo.setMessage("¿Desea salir del juego?");
			dialogo.setPositiveButton("Si", new OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
					dialog.cancel();
		            finish();
				}
		    });
			
			dialogo.setNegativeButton("No", new OnClickListener() {
				@Override
				public void onClick(DialogInterface dialog, int which) {
		        	dialog.cancel();
				}
		    });
			
			dialogo.create();
			dialogo.show();

        }
	   if (keyCode == KeyEvent.KEYCODE_BACK) return true;
	   else return false;
	}

	@Override
	public void onAccuracyChanged(Sensor sensor, int accuracy) {
		
	}

	@Override
	public void onSensorChanged(SensorEvent event) {
		if (grabar == true) {
			gravedad[0] = alpha * gravedad[0] + (1 - alpha) 
					* event.values[0];
			gravedad[1] = alpha * gravedad[1] + (1 - alpha) 
					* event.values[1]; 
			gravedad[2] = alpha * gravedad[2] + (1 - alpha) 
					* event.values[2];
			
			valorX = event.values[0] - gravedad[0];
			valorY = event.values[1] - gravedad[1];
			valorZ = event.values[2] - gravedad[2];
			
			recorrido.add(new Coordenada(valorX, valorY, valorZ));
		}
		
	}
	
//	public static void Camara() {
//		 try
//         {
//
//Este código es previo al evento de activar la cámara de fotos.
// 
//         Intent icamara = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
//         Time now = new Time();
//         archivo = "";
//         now.setToNow();
//
//Aquí me creo un archivo (file) cuyo nombre será un código + un tipo + hora
//         
//         archivo = Environment.getExternalStorageDirectory() + "/external_sd/Fotos/"+ "ID" + parte.getID()+ tipoFoto + now.format2445().toString() +".jpg";
//         file = new File(archivo);
//         
//Finalmente ejecuto la actividad cámara pasándole dicho archivo como parámetro
//
//                 Uri outputFileUri = Uri.fromFile(file); 
//                 icamara.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
//                 startActivityForResult(icamara,0);
//         }
//         
//         catch(Exception e)
//         {
//                 Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
//         }
// 
//	}
	
	public static void comenzarGrabarDatos() {
		grabar = true;
	}
	
	public static void pararGrabarDatos() {
		grabar = false;
	}

	public static ArrayList<Coordenada> getRecorrido() {
		return recorrido;
	}
	
	public static InputStream direccionPatron(int nPrueba) {
		switch (nPrueba) {
		case 1:
			return p1;
//			completar patrones a leer
		default:
			return null;
		}
	}
}
